table of contents
MODIFY_LDT(2) | Руководство программиста Linux | MODIFY_LDT(2) |
ИМЯ¶
modify_ldt - получает или устанавливает ldt
ОБЗОР¶
#include <sys/types.h> int modify_ldt(int func, void *ptr, unsigned long bytecount);
ОПИСАНИЕ¶
Вызов modify_ldt() читает или записывает локальную таблицу дескрипторов (ldt) процесса. Ldt — это таблица управления памятью процесса, используемая в процессорах i386. Подробнее о содержимом этой таблицы читайте в руководствах по процессору Intel 386.
Если значение func равно 0, то modify_ldt() читает ldt в память по адресу ptr. Количество прочитанных байт меньше bytecount и равно реальному размеру ldt.
Если значение func равно 1, то modify_ldt() изменяет элемент ldt. Значение ptr указывает на структуру user_desc, а bytecount должно быть равно размеру этой структуры.
Структура
user_desc
определена
в <asm/ldt.h>
следующим
образом:
struct user_desc {
unsigned int entry_number;
unsigned long base_addr;
unsigned int limit;
unsigned int seg_32bit:1;
unsigned int contents:2;
unsigned int read_exec_only:1;
unsigned int limit_in_pages:1;
unsigned int seg_not_present:1;
unsigned int useable:1; };
В Linux версии 2.4 и более ранних эта структура называлась modify_ldt_ldt_s.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении modify_ldt() возвращается реальное количество прочитанных байт (при чтении) или 0 (при записи). При ошибке modify_ldt() возвращает -1, а errno устанавливается в соответствующее значение.
ОШИБКИ¶
СООТВЕТСТВИЕ СТАНДАРТАМ¶
Данный вызов есть только в Linux и не должен использоваться в программах, которые должны быть переносимыми.
ЗАМЕЧАНИЯ¶
В glibc нет обёртки для данного системного вызова; запускайте его с помощью syscall(2).
СМОТРИТЕ ТАКЖЕ¶
2007-06-01 | Linux |